#!/bin/bash

# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2024 ArchR (https://github.com/archr-linux/Arch-R)

# Simple script to watch the battery capacity and
# turn the power LED orange when it reaches 30%, red at 20%, and blinking red at 10%

. /etc/profile

LED_PATH="/sys/devices/platform/"

function bat_led_off() {
  n=1
  while [ "$n" -lt 4 ]; do
    echo 0 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/brightness
    echo 0 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/brightness
    echo 0 0 0 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/multi_intensity
    echo 0 0 0 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/multi_intensity
    n=$(( n + 1 ))
  done
}

function bat_led_red() {
  n=1
  while [ "$n" -lt 4 ]; do
    echo 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/brightness
    echo 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/brightness
    echo 0 0 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/multi_intensity
    echo 0 0 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/multi_intensity
    n=$(( n + 1 ))
  done
}

function bat_led_green() {
  n=1
  while [ "$n" -lt 4 ]; do
    echo 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/brightness
    echo 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/brightness
    echo 0 255 0 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/multi_intensity
    echo 0 255 0 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/multi_intensity
    n=$(( n + 1 ))
  done
}

function bat_led_orange() {
  n=1
  while [ "$n" -lt 4 ]; do
    echo 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/brightness
    echo 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/brightness
    echo 0 20 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/multi_intensity
    echo 0 20 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/multi_intensity
    n=$(( n + 1 ))
  done
}

function bat_led_yellow() {
  n=1
  while [ "$n" -lt 4 ]; do
    echo 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/brightness
    echo 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/brightness
    echo 0 125 255 >  ${LED_PATH}/multi-ledl${n}/leds/rgb:l${n}/multi_intensity
    echo 0 125 255 >  ${LED_PATH}/multi-ledr${n}/leds/rgb:r${n}/multi_intensity
    n=$(( n + 1 ))
  done
}

PREV_BATCAP="null"
while true
  do
  BAT_LED_STATE=$(get_setting led.color)
  if [ ! ${BAT_LED_STATE} == "battery" ]; then
    break
  else
    CAP=$(cat /sys/class/power_supply/battery/capacity)
    STAT=$(cat /sys/class/power_supply/battery/status)
      if [ ${STAT} == "Discharging" ]; then
        if (( ${CAP} <= 10 ))
          then
            for ctr in $(seq 1 1 5)
          do
            bat_led_red
            sleep .5
            bat_led_off
            sleep .5
          done
          continue
        elif (( ${CAP} <= 20 ))
        then
          BATCAP="D_RED"
          if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then
            bat_led_red
          fi
        elif (( ${CAP} <=  30 ))
        then
          BATCAP="D_ORANGE"
          if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then
            bat_led_orange
          fi
        elif (( ${CAP} <=  40 ))
        then
          BATCAP="D_YELLOW"
          if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then
            bat_led_yellow
          fi
        else
          BATCAP="D_GREEN"
          if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then
            bat_led_green
          fi
        fi
      elif (( ${CAP} <= 94 ))
      then
        BATCAP="C_ORANGE"
        if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then
          bat_led_orange
        fi
      elif (( ${CAP} >= 95 ))
      then
        BATCAP="C_GREEN"
        if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then
          bat_led_green
        fi
      fi
      PREV_BATCAP=${BATCAP}
      sleep 15
  fi
done
